/* File Name: server.c */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#include<iostream>
#include<cstdlib>

using namespace std;

//head files of Linux
#include<unistd.h>   //for fork and read

#include<arpa/inet.h>

#include <fcntl.h>
#include <sys/select.h>
#include<sys/ioctl.h>





#define DEFAULT_PORT 8000
#define MAXLINE 4096

struct send_info
{
    char length; // 8 char
    char command;
    char data11;
    char data12;
    float data1;
    float data2;
    float data3;
    float data4;

    float data5;
    float data6;
    float data7;
    float data8;


    float data10;
    char data9;
//    char data13;
};





int main(int argc, char** argv)
{
    int    socket_fd, connect_fd;
    struct sockaddr_in     servaddr;
    char    buff[4096];
    int     n;
    struct send_info packetip,rev_packet;
    //初始化Socket
    if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
        printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
        exit(0);
    }
    //初始化
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
    servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT

    //将本地地址绑定到所创建的套接字上
    if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
        printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
        exit(0);
    }
    //开始监听是否有客户端连接
    if( listen(socket_fd, 10) == -1){
        printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
        exit(0);
    }
    printf("======waiting for client's request======\n");
    if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){
        printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
    }
    while(1){
        //阻塞直到有客户端连接，不然多浪费CPU资源。

        //接受客户端传过来的数据
        n = recv(connect_fd, buff, MAXLINE, 0);

        //buff[n] = '\0';

        memset(&rev_packet,0,sizeof(rev_packet));
        memcpy(&rev_packet,buff,sizeof(rev_packet));


        printf("recv msg from client: %c\n", rev_packet.data9);
        //close(connect_fd);
    }
    close(socket_fd);
}